/*
 * @Description: 抽象类
 * @notes: 
 * @Author: 台火山
 * @Date: 2024-03-22 19:01:54
 * @LastEditors: 台火山
 * @LastEditTime: 2024-03-22 19:17:25
 */
(function () {
    /**
     *  abstract 抽象类
     *      以 abstract 开头的类时抽象类
     *          抽象类和其他类区别不大，只是不能用来创建对象
     *          抽象类就是专门用来继承的类
     * 
     *      抽象类可以添加抽象方法
     */
    abstract class Animal {
        name: string;
        constructor(name: string) {
            this.name = name;
        }
        /**
         *  abstract
         *  定义一个抽象方法
         *  抽象方法使用 abstract 开头，没有方法体
         *  抽象方法只能定义在抽象类中，子类必须对抽象方法进行重写
         */
        abstract sayHello():void
    }

    class Dog extends Animal {
        sayHello() {
            console.log('汪汪汪~~~');
        }
    }

    class Cat extends Animal {
        sayHello() {
            console.log('喵喵喵~~~');
        }
    }

    const dog = new Dog('旺财');
    dog.sayHello();
    // const An = new Animal();
    const cat = new Cat('咪咪');
    cat.sayHello();
})();